package au.com.finalconcept.roo.addon.behaviours;

import org.springframework.roo.model.JavaType;

/**
 * Interface of operations this add-on offers. Typically used by a command type or an external add-on.
 *
 * @since 1.1
 */
public interface BehavioursOperations {

    /**
     * Setup the users project to use the RooBehaviours
     */
    void setup();

    /**
     * Indicate commands should be available
     * 
     * @return true if it should be available, otherwise false
     */
    boolean isCommandAvailable();

    /**
     * Annotate all Java types with the trigger of this add-on
     */
    void annotateSoftDeleteAll();

    /**
     * Annotate the provided Java type with the trigger of this add-on
     */
    void annotateSoftDeleteType(JavaType type);
    
    void annotateTimestampableAll();
    void annotateTimestampableType(JavaType type);
    void annotateSlugableType(JavaType type, String fields);
}